package com.easy.common.web.servlet;

import java.io.File;
import java.util.Date;

import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.annotation.WebListener;

import org.springframework.context.ApplicationContext;
import org.springframework.web.context.support.WebApplicationContextUtils;

import com.easy.common.util.Const;
import com.easy.modules.sysmgr.service.GlobalServiceI;
import com.easy.modules.sysmgr.service.MenuServiceI;
import com.easy.modules.sysmgr.service.UserServiceI;
import com.easy.modules.sysmgr.web.form.GlobalForm;
import com.easy.modules.sysmgr.web.form.UserForm;

@WebListener
public class MyContextListener implements ServletContextListener {
	
	private static ApplicationContext ctx = null;

	// 服务器启动时调用
	public void contextInitialized(ServletContextEvent evt) {
		System.out.println("#######[服务器启动]######");
		ctx = WebApplicationContextUtils.getWebApplicationContext(evt.getServletContext());
		
		ApplicationConstants.START_DATE = new Date();// 记录启动时间
		initialized(evt);
	}

	// 服务停止时调用
	public void contextDestroyed(ServletContextEvent evt) {
		// 清空结果也可以保存
		ApplicationConstants.START_DATE = null;
		ApplicationConstants.MAX_ONLINE_COUNT_DATE = null;
		
		System.out.println("#######[服务器关闭]######");
	}
	
	public void initialized(ServletContextEvent evt) {
		global(evt) ;
		initSuperAdmin(evt) ;
		generateMenus(evt) ;
		createParentFolder(evt) ;
	}
	
	
	/**
	 * 全局参数初始化
	 * @param evt
	 */
	public void global(ServletContextEvent evt) {
		System.out.println("#######[启动初始化]######全局参数") ;
		GlobalServiceI global = (GlobalServiceI) ctx.getBean("globalServiceImpl");
		
		GlobalForm form = new GlobalForm() ;
		form.setId("000000") ;
		
		GlobalForm gf = global.get(form) ;
		if(gf == null) {
			global.saveORupdate(form) ;
		}
		
		ApplicationConstants.GLOBAL_MAP.put("global", form) ;
	}
	
	/**
	 * 创建站点目录和文件管理目录
	 * @param evt
	 */
	public void createParentFolder(ServletContextEvent evt) {
		String parentPath = new File(evt.getServletContext().getRealPath("/")).getParent() ;
		
		System.out.println("#######[启动初始化]######当前项目环境的父目录创建["+Const.WWWROOT_RELAESE+"]目录") ;
		File wwwroot = new File(parentPath+File.separator+Const.WWWROOT_RELAESE) ;
		if(!wwwroot.exists()) {
			wwwroot.mkdirs() ;
		}
		System.out.println("#######[启动初始化]######当前项目环境的父目录创建["+Const.RESROOT+"]目录") ;
		File fileroot = new File(parentPath+File.separator+Const.RESROOT) ;
		if(!fileroot.exists()) {
			fileroot.mkdirs() ;
		}
	}
	
	
	/**
	 * 生成JSON 系统导航菜单
	 * 方法描述 : 
	 * 创建者：杨浩泉 
	 * 项目名称： destiny-cms
	 * 类名： InitServlet.java
	 * 版本： v1.0
	 * 创建时间： 2013-12-23 下午3:11:06 void
	 */
	public void generateMenus(ServletContextEvent evt) {
		System.out.println("#######[启动初始化]######生成系统导航菜单") ;
		MenuServiceI menu = (MenuServiceI) ctx.getBean("menuServiceImpl");
		try {
			menu.tree(null, evt.getServletContext()) ;
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	
	
	/**
	 * 启动初始化超级管理员账号
	 * @param evt void
	 */
	public void initSuperAdmin(ServletContextEvent evt) {
		System.out.println("#######[启动初始化]######初始化超级管理员") ;
		UserServiceI u = (UserServiceI) ctx.getBean("userServiceImpl");
		
		UserForm f = new UserForm() ;
		f.setAccount("root") ;
		
		UserForm uf = u.get(f) ;
		if(null == uf) {
			UserForm form = new UserForm() ;
			form.setNum("SYS_ROOT") ;
			form.setAccount("root") ;
			form.setPassword("") ;
			form.setTruename("超级管理员") ;
			form.setStatus(0) ;
			u.save(form) ;
		}
	}
}
